//设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。 
//
// 示例： 
//
// 
//输入：a = 1, b = 1
//输出：2 
//
// 
//
// 提示： 
//
// 
// a, b 均可能是负数或 0 
// 结果不会溢出 32 位整数 
// 
//
// Related Topics 位运算 数学 👍 106 👎 0


package LeetCode.editor.cn;


/**
 * @author ldltd
 * @date 2025-09-12 19:36:10
 * @description 面试题 17.01.不用加号的加法
 
 */
 
public class AddWithoutPlusLcci {
    public static void main(String[] args) {
    //测试代码
    AddWithoutPlusLcci fun = new AddWithoutPlusLcci();
    Solution solution= fun.new Solution();
    
    }

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {

        /*
可以发现，对于整数 a 和 b
在不考虑进位的情况下，其无进位加法结果为 a^b。
而所有需要进位的位为 a & b，进位后的进位结果为 (a & b) << 1。
        * */
    public int add(int a, int b) {
        // 保留进位，不断进位直到b等于0
        while (b != 0) {
            // 计算进位
            int carry = (a & b) << 1;
            // 计算非进位和
            a = a ^ b;
            // 继续处理进位
            b = carry;
        }
        return a;
    }
}

//leetcode submit region end(Prohibit modification and deletion)

}
